// src/utils/request.ts

import axios, {
  type AxiosInstance,
  type InternalAxiosRequestConfig,
  type AxiosResponse,
} from 'axios'
import { Toast } from 'vant' // 可以用 Vant 的 Toast 来提示错误信息

// 1. 创建 Axios 实例
const service: AxiosInstance = axios.create({
  baseURL: import.meta.env.VITE_APP_API_BASE_URL || '/api', // 你的 API 基础路径，可以从 .env 文件中获取
  timeout: 10000, // 请求超时时间
  headers: {
    'Content-Type': 'application/json;charset=utf-8',
  },
})

// 2. 请求拦截器
service.interceptors.request.use(
  (config: InternalAxiosRequestConfig) => {
    // 例如：在这里添加 Token 到请求头
    const token = localStorage.getItem('token')
    if (token) {
      config.headers.Authorization = `Bearer ${token}`
    }
    return config
  },
  (error: any) => {
    return Promise.reject(error)
  },
)

// 3. 响应拦截器
service.interceptors.response.use(
  (response: AxiosResponse) => {
    // 根据后端返回的状态码进行处理
    const res = response.data
    if (res.code !== 200) {
      // 假设后端返回的成功状态码是 200
      Toast.fail(res.message || '请求错误')
      // 如果是登录过期等情况，可以在这里处理跳转到登录页
      // if (res.code === 401) { ... }
      return Promise.reject(new Error(res.message || 'Error'))
    } else {
      return res
    }
  },
  (error: any) => {
    Toast.fail(error.message || '网络异常')
    return Promise.reject(error)
  },
)

export default service
